package com.xxh.cloud.provider.until;


import com.xxh.cloud.common.config.ContentConfig;
import com.xxh.cloud.common.util.DateUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
import java.util.Date;
import java.util.UUID;

/**
 * 实现基于JWT生成和解析令牌*/
public class JwtUtil {
    /**
     * 生成令牌
     * @param content 令牌携带的内容
     * @return JWT生成的Token*/
    public static String createToken(String content){
        return Jwts.builder().
                signWith(SignatureAlgorithm.HS256,createKey()).//设置签名算法
                setId(UUID.randomUUID().toString()).//设置唯一标识，防止重放攻击
                setSubject(content).//设置有效载荷  token中包含的有效信息以及时间
                setExpiration(DateUtil.getTimeM(ContentConfig.TOKEN_TIME)).//设置令牌失效时间
                compact();
    }
    /**
     * 解析令牌*/
    public static String parseToken(String token){
        Claims claims=Jwts.parser().setSigningKey(createKey()).parseClaimsJws(token).getBody();
        if(claims!=null) {
            if (claims.getExpiration().getTime() < new Date().getTime()) {
                //令牌超时
                return null;
            } else {
                return claims.getSubject();
            }
        }
        return null;
    }
    /**
     * 获取加密的签名对象*/
    private static Key createKey(){
        return new SecretKeySpec("cloudauth".getBytes(),"AES"); //第一个参数 类型  第二个参数 加密算法
    }
}
